package br.com.lojapi.dao;

import br.com.lojapi.bean.Categoria;
import br.com.lojapi.bean.Perfil;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Aluno
 */
public class CategoriaDAOImp implements CategoriaDAO {

    @Override
    public Object salvar(Object obj) throws Exception {
        Categoria categoria = (Categoria) obj;
        PreparedStatement ps = null;
        Connection conn = null;
        try {
            String SQL = "INSERT INTO categoria(nome, descricao) VALUES(?, ?)";
            conn = FabricaConexao.getConnection();
            ps = conn.prepareStatement(SQL);
            ps.setString(1, categoria.getNome());
            ps.setString(2, categoria.getDescricao());
            ps.executeUpdate();
        } catch (SQLException se) {
            throw new Exception("Erro ao tentar salvar categoria" + se.getMessage());
        } finally {
            FabricaConexao.closeConnection(conn, ps);
        }
        return categoria;
    }

    @Override
    public List procuraPorNome(String nome) throws Exception {
        PreparedStatement ps = null;
        Connection conn = null;
        ResultSet rs = null;
        List categorias = new ArrayList();
        try {
            String SQL = "SELECT * FROM categoria WHERE nome LIKE ?";
            conn = FabricaConexao.getConnection();
            ps = conn.prepareStatement(SQL);
            ps.setString(1, "%" + nome + "%");
            rs = ps.executeQuery();
            while (rs.next()) {
                Categoria categoria = new Categoria();
                categoria.setId(rs.getInt("id"));
                categoria.setNome(rs.getString("nome"));
                categoria.setDescricao(rs.getString("descricao"));
                categorias.add(categoria);
            }
        } catch (SQLException se) {
            System.out.println("Erro ao tentar listar dados da Categoria" + se.getMessage());
        } finally {
            FabricaConexao.closeConnection(conn, ps);
        }
        return categorias;
    }

    @Override
    public void alterar(Object obj) throws Exception {
        Categoria categoria = (Categoria) obj;
        PreparedStatement ps = null;
        Connection conn = null;
        try {
            String SQL = "UPDATE categoria SET nome = ?, descricao = ? WHERE id = ?";
            conn = FabricaConexao.getConnection();
            ps = conn.prepareStatement(SQL);
            ps.setString(1, categoria.getNome());
            ps.setString(2, categoria.getDescricao());
            ps.setInt(3, categoria.getId());
            ps.executeUpdate();
        } catch (Exception se) {
            System.out.println("Erro ao tentar alterar dados da Categoria" + se.getMessage());
        } finally {
            FabricaConexao.closeConnection(conn, ps);
        }
    }

    @Override
    public void excluir(int id) throws Exception {
        PreparedStatement ps = null;
        Connection conn = null;
        try {
            String SQL = "DELETE FROM categoria WHERE id = ?";
            conn = FabricaConexao.getConnection();
            ps = conn.prepareStatement(SQL);
            ps.setInt(1, id);
            ps.executeUpdate();
        } catch (Exception e) {
            System.out.println("Erro ao excluir Categoria" + e.getMessage());
        } finally {
            FabricaConexao.closeConnection(conn, ps);
        }
    }

    @Override
    public Object procurar(Integer id) throws Exception {
        PreparedStatement ps = null;
        Connection conn = null;
        ResultSet rs = null;
        Categoria categoria = null;
        try {
            String SQL = "SELECT * FROM categoria WHERE id = ?";
            conn = FabricaConexao.getConnection();
            ps = conn.prepareStatement(SQL);
            ps.setInt(1, id);
            rs = ps.executeQuery();
            if (rs.next()) {
                categoria = new Categoria();
                categoria.setId(rs.getInt("id"));
                categoria.setNome(rs.getString("nome"));
                categoria.setDescricao(rs.getString("descricao"));
            }
        } catch (SQLException se) {
            throw new Exception("Erro ao tentar procurar Categoria" + se.getMessage());
        } finally {
            FabricaConexao.closeConnection(conn, ps, rs);
        }
        return categoria;
    }

    @Override
    public List<Object> listar() throws Exception {
        PreparedStatement ps = null;
        Connection conn = null;
        ResultSet rs;
        Categoria categoria;
        List categorias = new ArrayList();
        try {
            String SQL = "SELECT * FROM categoria ";
            conn = FabricaConexao.getConnection();
            ps = conn.prepareStatement(SQL);
            rs = ps.executeQuery();
            while (rs.next()) {
                categoria = new Categoria();
                categoria.setId(rs.getInt("id"));
                categoria.setNome(rs.getString("nome"));
                categoria.setDescricao(rs.getString("descricao"));
                categorias.add(categoria);
            }
        } catch (SQLException se) {
            throw new Exception("Erro ao tentar listar dados de categoria"
                    + se.getMessage());
        } finally {
            FabricaConexao.closeConnection(conn, ps);
        }
        return categorias;
    }
}